#include <stdio.h>
#include <algorithm>
#include <limits.h>
using namespace std;

typedef struct env {
	int w, h, num;
} Env;

int n, w, h;
Env lis[5050];
Env seq[5050];
int PD[5050];
int best;
int ind;
int val;

bool cmp(Env a, Env b) {
	if (a.w==b.w)
		return a.h<b.h;

	return a.w<b.w;
}

bool cmp2(Env a, Env b) {
	if (a.w<b.w && a.h<b.h) return true;

	return false;
}

int last;

int main() {
	scanf("%d %d %d", &n, &w, &h);

	for (int i=1; i<=n; i++) {
		scanf("%d %d", &lis[i].w, &lis[i].h);	
		lis[i].num=i;
	}

	sort(lis, lis+n+1, cmp);

	PD[0] = 0;
	best = 0;

	for (int i=1; i<=n; i++) {
		best=0;

		if (lis[i].w<=w || lis[i].h<=h) {
			PD[i]=0; continue;
		}
	
		for (int j=i-1; j>=0; j--) {
			if (cmp2(lis[j], lis[i])) {
				if (best<PD[j]) best = PD[j];
			}
		}

		PD[i] = best+1;
	}

	best = 0;

	for (int i=1; i<=n; i++) {
		if (best < PD[i]) {
			best = PD[i];
			ind = i;
		}
	}

	val = PD[ind];
	seq[val] = lis[ind];
	last = val;

	printf("%d\n", val);
	
	while (val) {
		if (PD[ind]==val-1) {
			if (cmp2(lis[ind],seq[val])) {
				val--;
				seq[val]=lis[ind];
			}
		}

		ind--;
	}

	for (int i=1; i<=last; i++) {
		printf("%d", seq[i].num);

		if (i<last) printf(" ");
	} 

	printf("\n");
	
	return 0;	
}
